package de.plushnikov.intellij.plugin.agent;
import java.lang.instrument.Instrumentation;
import java.util.ArrayList;
import java.util.List;
import de.plushnikov.intellij.plugin.agent.transformer.IdeaPatcherTransformer;
import de.plushnikov.intellij.plugin.agent.transformer.ModifierVisibilityClassFileTransformer;
/**
* This is a java-agent that patches some of idea's classes.
*/
public class IdeaPatcher {
private static List<IdeaPatcherTransformer> KNOWN_TRANSFORMERS = new ArrayList<IdeaPatcherTransformer>();
static {
KNOWN_TRANSFORMERS.add(new ModifierVisibilityClassFileTransformer());
}
public static void agentmain(String agentArgs, Instrumentation instrumentation) throws Throwable {
System.out.println("Started IntelliJ Lombok Agent main");
runAgent(agentArgs, instrumentation, true);
System.out.println("Finished IntelliJ Lombok Agent");
}
public static void premain(String agentArgs, Instrumentation instrumentation) throws Throwable {
System.out.println("Started IntelliJ Lombok Agent pre main");
runAgent(agentArgs, instrumentation, false);
System.out.println("Finished IntelliJ Lombok Agent");
}
static void runAgent(String agentArgs, Instrumentation instrumentation, boolean injected) throws Exception {
IdeaPatcherOptionsHolder optionsHolder = IdeaPatcherOptionsHolder.getInstance();
optionsHolder.addAll(agentArgs);
for (IdeaPatcherTransformer transformer : KNOWN_TRANSFORMERS) {
if (transformer.supported()) {
instrumentation.addTransformer(transformer, transformer.canRetransform());
}
}
}
}